/**
 * @System abcs-aspchain
 * @Description: Copyright: Copyright (c) 2018
 * Company: Aspire Technologies
 * @author zhongzifeng
 * @date 2018/12/11 16:34
 * @version V1.0
 */
package com.asp.aspchain.core.util;

import org.apache.commons.lang3.StringUtils;

import java.io.File;

/**
 *
 * 目录工具类
 * @author zhongzifeng
 * @date 2018/12/11 16:34
 *
 */
public class PathUtil {

    /**
     * 对象操作目录参数
     */
    private StringBuffer pathStr;

    /**
     * 创建地址工具类
     * @param path 初始化路径字符串
     * @throws NullPointerException 目录字符串为空
     */
    public PathUtil(String path) throws NullPointerException {
        if(StringUtils.isBlank(path)){
            throw new NullPointerException("path is blank!");
        }
        File file = new File(path);
        pathStr = new StringBuffer(file.toString());
    }

    /**
     * 内部使用，目录拼接
     * @param path 拼接字符串
     * @param isSpliceSlash 是否与前端拼接斜杠
     */
    private void addPath(String path, boolean isSpliceSlash){
        if(isSpliceSlash){
            pathStr.append("\\");
        }
        pathStr.append(path);
    }

    /**
     * 增加目录深度
     * @param paths 增加的目录字符串
     */
    public void addPath(String paths){
        paths = paths.replaceAll("/","\\\\");
        String temp = paths;
        while (true){
            int i = temp.indexOf("\\");
            if(i == -1){
                addPath(temp,true);
                break;
            }
            if(++i >= temp.length()){
                break;
            }
            int l = temp.indexOf("\\",i);
            String path = temp.substring(i,l);
            if(StringUtils.isNotBlank(path)){
                addPath(path,true);
            }
            if((l+1) >= temp.length()){
                break;
            }
            temp = temp.substring(l);
        }
    }

    /**
     * 获取完整目录路径字符串
     * @return 完整目录路径字符串
     */
    @Override
    public String toString(){
        return pathStr.toString();
    }


    /**
     * 检查目录是否存在
     * @param isCreate 是否创建目录
     * @return 目录是否存在
     */
    public boolean directoryExists(boolean isCreate){
        File file = new File(pathStr.toString());
        if (file.exists()) {
            // 判断是目录还是文件
            return file.isDirectory();
        }
        if(isCreate){
            // 目录不存在创建目录
            return file.mkdirs();
        }
        return false;
    }

    /**
     * 判断目录是否文件
     * @return
     */
    public boolean fileExists(){
        File file = new File(pathStr.toString());
        if (file.exists()) {
            return !file.isDirectory();
        }
        return false;
    }


}
